package com.example.demo.validation.controller;

import com.example.demo.validation.dto.ConfigFormDTO;
import lombok.RequiredArgsConstructor;

import lombok.extern.slf4j.Slf4j;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author jiangjinwu
 * @version 1.0
 * @since 2025/10/4 10:32
 */

@Slf4j

@Controller
@RequestMapping("/validation")
@RequiredArgsConstructor
public class ValidationWebController {
//  @GetMapping("/configs")
//  public String listConfigs(Model model) {
//    List<ValidationConfig> configs = configService.list();
//    // 手动填充规则（或提供单独接口）
//    configs.forEach(config -> {
//      config.setRules(configService.baseMapper.selectRulesByConfigId(config.getId()));
//    });
//    model.addAttribute("configs", configs);
//    return "list";
////  }
//
//  @GetMapping("/config/new")
//  public String showCreateForm(Model model) {
//    model.addAttribute("config", new ConfigFormDTO());
//    return "edit";
//  }
//
//  @GetMapping("/config/{id}/edit")
//  public String showEditForm(@PathVariable Long id, Model model) {
//    ValidationConfig config = configService.baseMapper.selectConfigWithRules(id);
//    if (config == null) {
//      // 可以跳转到错误页面或返回列表
//      return "redirect:/validation/configs";
//    }
//    ConfigFormDTO dto = convertToDTO(config);
//    model.addAttribute("config", dto);
//    return "edit";
//  }
//
//  @PostMapping("/config")
//  public String saveConfig(@ModelAttribute ConfigFormDTO configDto) {
//    ValidationConfig config = convertToEntity(configDto);
//    configService.saveWithRules(config);
//    return "redirect:/validation/configs";
//  }
//
//  @GetMapping("/config/{id}")
//  public String deleteConfig(@PathVariable Long id) {
//    configService.removeWithRules(id);
//    return "redirect:/validation/configs";
//  }
//
//  @GetMapping("/import")
//  public String showImportPage(Model model) {
//    // 如果有导入结果，也通过model传递
//    return "import";
//  }
//
//  @PostMapping("/import")
//  public String importConfig(@RequestParam("file") MultipartFile file, Model model) {
//    if (file.isEmpty()) {
//      model.addAttribute("result", new ImportResult().addError("请选择文件"));
//      return "import";
//    }
//    try (InputStream is = file.getInputStream()) {
//      ImportResult result = importService.importFromExcel(is);
//      model.addAttribute("result", result);
//    } catch (IOException e) {
//      model.addAttribute("result", new ImportResult().addError("文件读取失败: " + e.getMessage()));
//    } catch (Exception e) {
//      model.addAttribute("result", new ImportResult().addError("导入失败: " + e.getMessage()));
//    }
//    return "import"; // 重新渲染导入页面显示结果
//  }
//
//  // Helper methods to convert between DTO and Entity
//  private ConfigFormDTO convertToDTO(ValidationConfig config) {
//    ConfigFormDTO dto = new ConfigFormDTO();
//    BeanUtils.copyProperties(config, dto);
//    if (config.getRules() != null) {
//      dto.setRules(config.getRules().stream()
//          .map(r -> {
//            RuleFormDTO ruleDto = new RuleFormDTO();
//            BeanUtils.copyProperties(r, ruleDto);
//            return ruleDto;
//          })
//          .collect(Collectors.toList()));
//    }
//    return dto;
//  }
//
//  private ValidationConfig convertToEntity(ConfigFormDTO dto) {
//    ValidationConfig config = new ValidationConfig();
//    BeanUtils.copyProperties(dto, config);
//    if (dto.getRules() != null) {
//      config.setRules(dto.getRules().stream()
//          .map(r -> {
//            ValidationRule rule = new ValidationRule();
//            BeanUtils.copyProperties(r, rule);
//            return rule;
//          })
//          .collect(Collectors.toList()));
//    }
//    return config;
//  }*/
}
